python 例外処理について考える v2
Todoリストを作るときの例外を考えてみる
例外を考える前に大事なのが、普通の設計と契約、そして契約通りの実装
Todoリストの要求
Todoを新規作成する
Todoを削除する
Todoの内容を更新する
Todoを完了状態にする
Todo一覧を得る
各要求を満たすような設計を行う
(省略)
より細かい設計にて、クラス・メソッド・関数などが割り出されていく
これらの何かしら値を入れて実行したら、何かしらの結果が起きるものをひっくるめてルーチンと呼ぶ
各ルーチンには契約が定められるはずである
こういう引数を与えたら、こう言う結果が返る
と言ったような
契約が存在しないルーチンなどあり得ないと思うこと
必ず契約がある
そのルーチンを使う際に与える引数に設けられた条件(事前条件)
ルーチンが処理を行った結果、呼び出し元に返す値への条件(事後条件)
ルーチンがどこぞのデータに対して与えた変化が適切かの条件(不変条件)
ルーチンには必ずある
引数・返り値・副作用(データの変化)
契約通りの動きをしている限り、何が起きても例外とは言えないと覚えておこう
呼び出し元が、呼び出し元からnull値を受け取ったとして、そんな値を返して来んなよ!と思ったとしても、契約でそうなってる以上はエラーでもなんでもない。
逆に契約的にマイナスが返ってくるはずがないのに、マイナスが返ってきたら契約違反。
これは例外である。
呼び出し先は、値を返す前に返り値をチェックして、マイナスになるようなら例外を出さなきゃいけないのである。
さて、例外処理って何?
契約が満たされない時に、
なぜ例外処理をする?